<template>
    <div class="view">
        <Select v-model="SelectDataValue" style="width: 300px">
            <Option v-for="(item, index) in TypeData" :value="index" :key="item.BasicParam.EquipId">{{ item.BasicParam.EquipModel }}</Option>
        </Select>
        <Button type="primary" @click="getValue">取值显示</Button>
        <FormView v-if="showView" :Configs="Config" v-model="SelectData"></FormView>
    </div>
</template>
<script>
import config from './config'
import TypeData from './TypeData'
import FormView from './FormView.vue'

// ----------------------
//   配置文件数据格式转换
// ----------------------
// 临时存储数据
var _Mapping = {}
// 把 数据用 EquType 字段 进行分组
var CommonMapping = []
for (let i = 0; i < config.length; i++) {
    const element = config[i]
    element.show = true
    if (element.EquType && !_Mapping[element.EquType]) {
        _Mapping[element.EquType] = []
    }
    if (element.EquType) {
        // 有类型的 配置数据放在制定的配置中
        _Mapping[element.EquType].push(element)
    } else {
        // 没有类型的（意思代表每个类型都有）先缓存起来
        CommonMapping.push(element)
    }
}
// 实际存储数据
var Mapping = {}
for (const key in _Mapping) {
    const element = _Mapping[key]
    // 把缓存中的数据，放在每个类别的数据中
    for (let i = 0; i < CommonMapping.length; i++) {
        const item = CommonMapping[i]
        // 注意，这里一定要用深拷贝来扩展配置文件，防止出现变量混淆问题
        element.push(JSON.parse(JSON.stringify(item)))
    }
    var itemMapping = {}
    // 根据 ParentKey 再进行一次对象分组
    for (let i = 0; i < element.length; i++) {
        const _item = element[i]
        var _key = _item.ParentKey

        // 临时合并Config 项
        if (_key == 'TranRevList') {
            _key = 'BasicParam'
        }

        if (!itemMapping[_key]) {
            itemMapping[_key] = []
        }
        itemMapping[_key].push(_item)
    }
    // 缓存分组数据
    Mapping[key] = itemMapping
}

export default {
    components: {
        FormView
    },
    data() {
        return {
            Mapping: Mapping,
            TypeData: TypeData,
            SelectDataValue: 0,
            Config: null,
            SelectData: null,
            showView: false
        }
    },
    watch: {
        SelectDataValue: {
            immediate: true,
            handler(val) {
                this.showView = false
                this.SelectData = JSON.parse(JSON.stringify(this.TypeData[val]))
                var SubType = this.SelectData.BasicParam.EquipSubTypeCode
                var Type = this.SelectData.BasicParam.EquipTypeCode
                // 子类型数据存在，则用子类型数据
                if (this.Mapping[SubType]) {
                    this.Config = JSON.parse(JSON.stringify(this.Mapping[SubType]))
                } else {
                    // 子类型不存在，则转换类型
                    if (Type == '30') {
                        if (this.SelectData.BasicParam.PlatformType == '70') {
                            this.Config = JSON.parse(JSON.stringify(this.Mapping['30T']))
                        } else {
                            this.Config = JSON.parse(JSON.stringify(this.Mapping['30D']))
                        }
                    } else {
                        this.Config = JSON.parse(JSON.stringify(this.Mapping[Type]))
                    }
                }
                this.$nextTick(() => {
                    this.showView = true
                })
            }
        }
    },
    methods: {
        getValue() {
            console.JSON(this.SelectData)
        }
    }
}
</script>
